#include <iostream>
#include <cstdio>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <cstring>
#include <fcntl.h>

void* my_malloc(int size)
{
    if(size > 0)
    {
        void *ptr = ::mmap(nullptr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
        if(ptr == MAP_FAILED){
            return nullptr;
        }
        return ptr;
    }
    return nullptr;
}

void my_free(void *start, size_t size)
{
    if(start != nullptr && size > 0)
    {
        int ret = ::munmap(start, size);
        if(ret != 0)
        {
            perror("munmap");
        }
    }
}

int main()
{
    size_t size = 1024;
    char *ptr = (char*)my_malloc(size);
    if(ptr == nullptr){
        std::cerr << "malloc failed" << std::endl;
        return 1;
    }

     // 使用分配的内存（这里只是简单地打印指针值）
    printf("Allocated memory at address: %p\n", ptr);

    // ... 在这里可以使用ptr指向的内存 ...
    memset(ptr, 'A', size);

    for(int i = 0; i < size; i++)
    {
        printf("%c ", ptr[i]);
        sleep(1);
    }

    my_free(ptr, size);
    return 0;
}